package com.mlx.permission.inter;

import com.mlx.permission.entity.Permission;

import java.util.Collection;
import java.util.HashSet;

/**
 * 收集器：负责收集实体信息和实体权限
 * @param <P> 权限类型
 *
 */
public interface Collector<P extends Permission>{

    /**
     * 获取当前登录用户的所有权限
     * @return 当前用户所有权限
     */
    Collection<P> getPermissionCollection();

    /**
     * 获取当前实体：一般指当前登录用户id
     * @return 字符串
     */
    String getCurrentEntity();

    /**
     * 获取开放实体集合
     * 开放实体相当于超级管理员，框架对开放实体不进行权限验证而直接放行；
     * @return 开放实体集合
     */
    default Collection<String> getOpenEntityCollection(){
        return new HashSet<>();
    }

    /**
     * 获取内置的开放实体集合；
     * 内置开放实体与开放实体的区别，框架对于这两个概念的区分是：
     *     内置开放实体是通过配置文件配置或者代码固定配置的一类实体
     *     普通的开放实体是通过查询数据库获取到的一类实体
     *     代码固定配置的执行效率比查询数据库的效率要高，对某类用户，能不查询数据库就不查询数据库
     *
     * @return 内置的开放实体集合
     */
    default Collection<String> getBuiltInOpenEntityCollection(){
        return new HashSet<>();
    }

}
